import config from './config.js';

// 封装 uni.request 请求
const request = (options = {}) => {
  return new Promise((resolve, reject) => {
    // 拼接完整请求地址
    const url = options.url.startsWith('http') ? options.url : config.baseUrl + options.url;
    
    // 默认请求头
    const defaultHeader = {
      'content-type': 'application/x-www-form-urlencoded'
    };
    
    // 合并请求头
    const header = Object.assign({}, defaultHeader, options.header || {});
    
    uni.request({
      url: url,
      method: options.method || 'GET',
      header: header,
      data: options.data || {},
      timeout: options.timeout || config.timeout,
      success: (res) => {
        // 开发模式下，打印完整的API响应数据，帮助调试
        console.log(`API Response [${options.method || 'GET'} ${url}]:`, res);
        
        // 请求成功但业务失败
        if (res.data && res.data.code !== 200) {
          // 添加错误日志输出
          console.error('API请求业务错误:', {
            url: url,
            requestData: options.data || {},
            response: res.data
          });
          
          // 如果没有设置skipErrorToast，则显示错误提示
          if (options.skipErrorToast !== true) {
            // 统一处理错误
            uni.showToast({
              title: res.data.msg || '请求失败',
              icon: 'none',
              duration: 2000
            });
          }
          
          reject(res);
        } else {
          resolve(res);
        }
      },
      fail: (err) => {
        // 添加错误日志输出
        console.error('API请求网络错误:', {
          url: url,
          requestData: options.data || {},
          error: err
        });
        
        // 如果没有设置skipErrorToast，则显示错误提示
        if (options.skipErrorToast !== true) {
          // 显示错误信息
          uni.showToast({
            title: '网络错误，请稍后再试',
            icon: 'none',
            duration: 2000
          });
        }
        
        reject(err);
      }
    });
  });
};

// 导出封装好的 request 方法
export default {
  // GET请求
  get: (url, data = {}, options = {}) => {
    return request({
      url: url,
      method: 'GET',
      data: data,
      ...options
    });
  },
  
  // POST请求
  post: (url, data = {}, options = {}) => {
    return request({
      url: url,
      method: 'POST',
      data: data,
      ...options
    });
  },
  
  // PUT请求
  put: (url, data = {}, options = {}) => {
    return request({
      url: url,
      method: 'PUT',
      data: data,
      ...options
    });
  },
  
  // DELETE请求
  delete: (url, data = {}, options = {}) => {
    return request({
      url: url,
      method: 'DELETE',
      data: data,
      ...options
    });
  },
  
  // 自定义请求
  request
}; 